package com.redepronik.negosyscom.invfac.controller;

import static com.redepronik.negosys.utils.Utils.newBigDecimal;

import java.math.BigDecimal;
import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.invfac.entity.Bodega;
import com.redepronik.negosys.invfac.entity.Grupo;
import com.redepronik.negosys.invfac.entity.Producto;
import com.redepronik.negosys.invfac.service.BodegaService;
import com.redepronik.negosys.invfac.service.GrupoService;
import com.redepronik.negosys.invfac.service.KardexService;
import com.redepronik.negosys.invfac.service.ProductoService;

@Controller
@Scope("session")
public class InventarioInicialBean {

	@Autowired
	private ProductoService productoService;

	@Autowired
	private KardexService kardexService;

	@Autowired
	private BodegaService bodegaService;

	@Autowired
	private GrupoService grupoService;

	private Producto producto;

	private List<Bodega> listaBodegas;
	private Bodega bodega;
	private boolean bnBodega;

	private Integer cantidad;
	private BigDecimal precio;

	private List<Producto> listaProductos;
	private List<Grupo> listaGrupos;
	private String criterioBusqueda;
	private Grupo grupo;

	public InventarioInicialBean() {
	}

	public void actualizarKardexInicial() {
		if (kardexService.insertarKardexInicial(producto, bodega, precio,
				cantidad))
			limpiarObjetos();
	}

	public Bodega getBodega() {
		return bodega;
	}

	public Integer getCantidad() {
		return cantidad;
	}

	public String getCriterioBusqueda() {
		return criterioBusqueda;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	public List<Bodega> getListaBodegas() {
		return listaBodegas;
	}

	public List<Grupo> getListaGrupos() {
		return listaGrupos;
	}

	public List<Producto> getListaProductos() {
		return listaProductos;
	}

	public BigDecimal getPrecio() {
		return precio;
	}

	public Producto getProducto() {
		return producto;
	}

	@PostConstruct
	private void init() {
		listaGrupos = grupoService.obtener();
		listaBodegas = bodegaService.obtenerTodos();
		limpiarObjetos();
	}

	public boolean isBnBodega() {
		return bnBodega;
	}

	public void limpiarObjetos() {
		producto = new Producto();
		bodega = new Bodega();
		bnBodega = false;
		cantidad = 0;
		precio = newBigDecimal();
		grupo = new Grupo();
		// listaProductos = new ArrayList<Producto>();
		if (listaBodegas.size() == 1) {
			bodega.setBodegaid(listaBodegas.get(0).getBodegaid());
			bnBodega = true;
		}
	}

	public void obtenerProducto() {
		producto = productoService.obtenerPorProductoId(producto
				.getProductoid());
		precio = producto.getPrecio();
	}

	public void obtenerProductos() {
		setListaProductos(productoService.obtener(criterioBusqueda,
				grupo.getGrupoid()));
	}

	public void setBnBodega(boolean bnBodega) {
		this.bnBodega = bnBodega;
	}

	public void setBodega(Bodega bodega) {
		this.bodega = bodega;
	}

	public void setCantidad(Integer cantidad) {
		this.cantidad = cantidad;
	}

	public void setCriterioBusqueda(String criterioBusqueda) {
		this.criterioBusqueda = criterioBusqueda;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public void setListaBodegas(List<Bodega> listaBodegas) {
		this.listaBodegas = listaBodegas;
	}

	public void setListaGrupos(List<Grupo> listaGrupos) {
		this.listaGrupos = listaGrupos;
	}

	public void setListaProductos(List<Producto> listaProductos) {
		this.listaProductos = listaProductos;
	}

	public void setPrecio(BigDecimal precio) {
		this.precio = precio;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

}